/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package th.stripes.action;

import able.stripes.JSP;
import com.google.inject.Inject;
import com.oas.thit._this.pin.xsd.AccountValidationResponseBody;
import com.oas.thit._this.pin.xsd.PinValidationRequestBody;
import com.oas.thit._this.profile.depositor.update.xsd.DepositorProfileUpdateRequestBody;
import com.oas.thit._this.profile.depositor.xsd.DepositorProfileResponseBody;
import com.oas.thit._this.xsd.THISBaseDataElementBody;
import javax.xml.bind.JAXBElement;
import java.util.Date;
import net.sourceforge.stripes.action.RedirectResolution;
import net.sourceforge.stripes.action.Resolution;
import net.sourceforge.stripes.action.UrlBinding;
import th.dao.KodPerananDAO;
import th.manager.UserManager;
import th.manager.AkaunManager;
import th.manager.ResponseManager;
import th.model.Akaun;
import th.model.InfoAudit;
import th.model.Pengguna;
import th.stripes.BaseActionBean;
import th.stripes.WelcomeActionBean;
import com.oas.thit.xmlmessage.xsd.Header;
import java.text.SimpleDateFormat;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import th.stripes.webservice.WebServiceUtil;
import org.apache.log4j.Logger;
import th.config.ableContextListener;
import th.dao.SejarahKataLaluanDAO;
import th.dao.THISutilDAO;
import th.manager.SMSgatewayManager;
import th.manager.SejarahKataLaluanManager;
import th.manager.SejarahTransaksiManager;
import th.model.Deposit;
import th.model.KodKebenaranTransaksi;
import th.model.SejarahKatalaluan;
import th.model.SejarahTransaksi;
import th.stripes.util.AccCheckUtil;
import th.stripes.util.PasswordValidatorUtil;

/**
 *
 * @author ubuntu
 */
@UrlBinding("/pengguna")
public class PenggunaActionBean extends BaseActionBean{
    
    private Pengguna pengguna;
    
    private String noPin;
    
    private String noAkaun;
    
    private String password;
    
    private String passbook;     
    
    private String oldPassword;
    
    private String tacNumber;
    
    private String imgidNew;
    
    private String secretPhraseNew;
    
    @Inject 
    UserManager userManager;
    
    @Inject 
    AkaunManager akaunManager;
    
    @Inject
    private ResponseManager responseManager;  
    
    @Inject private KodPerananDAO kodPerananDAO;
    
    @Inject
    private WebServiceUtil webUtil;  
    
    @Inject 
    private THISutilDAO tHISutilDAO;
    
    @Inject
    private SMSgatewayManager sMSgatewayManager;
   
    @Inject 
    private SejarahKataLaluanDAO sejarahKataLaluanDAO;
    
    @Inject
    private SejarahKataLaluanManager sejarahKataLaluanManager;
    
    @Inject
    private SejarahTransaksiManager sejarahTransaksiManager;
    
    private static String HEADER_ID_EDIT_SECURITY = "THMNGSEC"; //added in 2/6/2015
    private static String PIN_VLD_MSG_ID = "TPUSRMGTWD01";
    private static String ADD_ACC_MSG_ID = "TPUSRMGTWD02";
    private static String VAL_ACC_MSG_ID = "TPUSRMGTWD03";
    private static String HEADER_ID_PIN_VALIDATION= "THSCUVL";
    private static String HEADER_ID_VAL_ACCOUNT = "THSACVL";
    private static String PROFILE_ENQ_MSG_ID = "TPDPPROFWD01";
    private static String HEADER_ID_PROFILE_ENQUIRY = "THSDPQR";    
    private static String SUCCESSFUL="0000";
    private static String SYSTEM_ERROR = "9999"; 
    private static String ACC_STS_BANKRUP = "9201";
    private static String ACC_STS_DORMAN = "9202";    
    private static String ACC_STS_MATI = "9203";
    private static String ACC_STS_SULIT = "9204";
    private static String ACC_STS_TUTUP = "9205";
    private static String ACC_STS_EPF = "9206";
    private static String ACC_STS_TIDAKSAH = "9000";    
    private static String INVALID_ACC_IC = "9001";
    private static String STATUS_MATI = "M";
    private static String STATUS_BATAL = "Z";
    private static String INVALID_ACC_STATUS = "5678";
    private static String AKAUN_JENIS_KANAK = "02";
    private static String AKAUN_KWSP = "11";
    
    private com.oas.thit._this.services.THISServices service = new com.oas.thit._this.services.THISServices();
    private com.oas.thit._this.services.THISServicesPortType port = service.getTHISServicesHttpSoap11Endpoint();
    private static Logger LOG = Logger.getLogger(DepositActionBean.class);
    
    public Resolution showAddForm() {
        return new JSP("pguna/tambah_pguna.jsp");
    }
    
    public Resolution showTukarKataLaluanForm() {
        return new JSP("pguna/tukar_kata_laluan.jsp");
    }
    
    public Resolution addUser() {
        
        if (validate()) {
            addSimpleError("ID Pengguna telah wujud. Sebarang pertanyaan sila hubungi THCC di talian 03 6207 1919");
            return new JSP("pguna/tambah_pguna.jsp");
        } else {  
            
            PasswordValidatorUtil passwordValidator = ableContextListener.newInstance(PasswordValidatorUtil.class);
            if (!passwordValidator.validate(pengguna.getPassword()) ) {
                addSimpleError("Kata Laluan tidak menepati piawaian. Sila isi semula.");
                return new JSP("pguna/tambah_pguna.jsp");
            }
            
            String responseCode = "";
            try { // Call Web Service Operation
                // TODO initialize WS operation arguments here
                com.oas.thit._this.xsd.THISRequest req = new com.oas.thit._this.xsd.THISRequest();
                // TODO process result here                
                com.oas.thit._this.xsd.ObjectFactory objFactory = new com.oas.thit._this.xsd.ObjectFactory();
                req.setHeader(webUtil.createHeader(VAL_ACC_MSG_ID, HEADER_ID_VAL_ACCOUNT));
                THISBaseDataElementBody reqBody = objFactory.createTHISBaseDataElementBody();
                
                reqBody.setTHAcct(objFactory.createTHISBaseDataElementBodyTHAcct(noAkaun));
                reqBody.setTHICNo(objFactory.createTHISBaseDataElementBodyTHICNo(pengguna.getNoKp()));
                
                JAXBElement<THISBaseDataElementBody> jReqBody =  objFactory.createTHISRequestBody(reqBody);
                req.setBody(jReqBody);
                
                
                com.oas.thit._this.pin.xsd.AccountValidationResponse result = port.validateAccount(req);
                
                Header header = result.getHeader().getValue();
                responseCode = header.getResponseCode().getValue();
                //acct sts active,bankrupt,dormant,sulit
                if (responseCode.equals(SUCCESSFUL) || responseCode.equals(ACC_STS_SULIT) || responseCode.equals(ACC_STS_BANKRUP) || responseCode.equals(ACC_STS_DORMAN)) {
 
                    AccountValidationResponseBody resp = result.getBody().getValue(); 
                    if(resp.getTHAcctType()!=null && (resp.getTHAcctType().getValue().trim().equals(AKAUN_JENIS_KANAK) || (resp.getTHAcctType().getValue().trim().equals(AKAUN_KWSP)))){
                        addSimpleError("" + responseManager.getResponseMessage(ACC_STS_TIDAKSAH, VAL_ACC_MSG_ID));
                        return new JSP("pguna/msg.jsp");  
                   } else {
                     
                     // comment for dev propose   
                       String pinResult = checkPin();
                        
                        if (pinResult.equals(SUCCESSFUL)) {
                            InfoAudit ia = new InfoAudit();
                            ia.setDimasukOleh(pengguna);
                            ia.setTarikhMasuk(new Date());
                            pengguna.setInfoAudit(ia);     
                            pengguna.setJenisPengguna(kodPerananDAO.findById("001"));
                            pengguna.setActive('Y');
                            pengguna.setNama(resp.getTHName().getValue().trim());
                            pengguna.setNoPin(noPin);
                            //added in 8/6/15
                            if (pengguna.getSecPhrase() != null) {
                                pengguna.setSecPhrase(pengguna.getSecPhrase());
                            } else {
                                pengguna.setSecPhrase("");
                            }
                                
                            
                            
                            Akaun akaun = new Akaun();
                            akaun.setPengguna(pengguna);
                            akaun.setAkaunTmbhn(noAkaun);
                            akaun.setInfoAudit(ia);
                            akaun.setNamaAkaunTmbhn(resp.getTHName().getValue().trim());
                            akaun.setNoPengenalanTmbhn(pengguna.getNoKp());
                            akaun.setAkaunUtama("Y");
                            userManager.createPengguna(pengguna, akaun); 
                            addSimpleMessage("Pendaftaran Berjaya. Sila log masuk untuk menggunakan sistem e-THiJARI.");
                            
                        } else {
                            addSimpleError("" + responseManager.getResponseMessage(pinResult, PIN_VLD_MSG_ID)); 
                        }
                    }                    
                }
                else{
                    addSimpleError("" + responseManager.getResponseMessage(responseCode, ADD_ACC_MSG_ID)); 
                }
            } catch (Exception ex) {
                LOG.error(ex);
                responseCode = SYSTEM_ERROR;
                addSimpleError("" + responseManager.getResponseMessage(responseCode, ADD_ACC_MSG_ID)); 
            }
            return new JSP("pguna/msg.jsp");            
        }         
    }
    
    private String checkPin() {
        com.oas.thit._this.pin.xsd.PinValidationRequest req = new com.oas.thit._this.pin.xsd.PinValidationRequest();
        com.oas.thit._this.xsd.ObjectFactory objFactory = new com.oas.thit._this.xsd.ObjectFactory();
        com.oas.thit._this.pin.xsd.ObjectFactory pinObjFactory = new com.oas.thit._this.pin.xsd.ObjectFactory();
        req.setHeader(webUtil.createHeader(PIN_VLD_MSG_ID, HEADER_ID_PIN_VALIDATION));

        PinValidationRequestBody reqBody = pinObjFactory.createPinValidationRequestBody();

        reqBody.setTHAcct(objFactory.createTHISBaseDataElementBodyTHAcct(noAkaun));
        reqBody.setTHICNo(objFactory.createTHISBaseDataElementBodyTHICNo(pengguna.getNoKp()));
        reqBody.setTHPIN(pinObjFactory.createPinValidationRequestBodyTHPIN(noPin));

        JAXBElement<PinValidationRequestBody> jReqBody = pinObjFactory.createPinValidationRequestBody(reqBody);
        req.setBody(jReqBody);
        com.oas.thit._this.pin.xsd.PinValidationResponse result = port.thpinValidation(req);
        Header header = result.getHeader().getValue();
        return header.getResponseCode().getValue();
    }
    
    public Resolution updatePin() {
        pengguna = getContext().getCurrentUser();
        String responseCode = "";
        String noAkaun = akaunManager.getNoAkaun(pengguna.getNoKp(), "Y");
        if ( pengguna != null ) {
            try { // Call Web Service Operation
                com.oas.thit._this.pin.xsd.PinValidationRequest req = new com.oas.thit._this.pin.xsd.PinValidationRequest();
                com.oas.thit._this.xsd.ObjectFactory objFactory = new com.oas.thit._this.xsd.ObjectFactory();
                com.oas.thit._this.pin.xsd.ObjectFactory pinObjFactory = new com.oas.thit._this.pin.xsd.ObjectFactory();
                req.setHeader( webUtil.createHeader(PIN_VLD_MSG_ID, HEADER_ID_PIN_VALIDATION));
                
                PinValidationRequestBody reqBody = pinObjFactory.createPinValidationRequestBody();

                reqBody.setTHAcct(objFactory.createTHISBaseDataElementBodyTHAcct(noAkaun));
                reqBody.setTHICNo(objFactory.createTHISBaseDataElementBodyTHICNo(pengguna.getNoKp()));
                reqBody.setTHPIN(pinObjFactory.createPinValidationRequestBodyTHPIN(noPin));

                JAXBElement<PinValidationRequestBody> jReqBody =  pinObjFactory.createPinValidationRequestBody(reqBody);
                req.setBody(jReqBody);
                com.oas.thit._this.pin.xsd.PinValidationResponse result = port.thpinValidation(req);
                Header header = result.getHeader().getValue();
                responseCode = header.getResponseCode().getValue();
                if (responseCode.equals(SUCCESSFUL)) {
                    pengguna.setNoPin(noPin);
                    pengguna.getInfoAudit().setTarikhKemaskini(new Date());
                    pengguna.getInfoAudit().setDiKemaskiniOleh(pengguna);
                    userManager.updatePengguna(pengguna);
                    return new RedirectResolution(WelcomeActionBean.class); 
                }
                addSimpleError("" + responseManager.getResponseMessage(responseCode, PIN_VLD_MSG_ID)); 
            } catch (Exception ex) {
                LOG.error(ex);
                responseCode = SYSTEM_ERROR;
                addSimpleError("" + responseManager.getResponseMessage(responseCode, PIN_VLD_MSG_ID)); 
            }
                       
        }
        return new JSP("pguna/msg.jsp");               
    }
//    
//    private boolean validate () {
//        return  ( userManager.findUser( pengguna.getNoKp(), null) != null ? true : false );        
//    }
    
    //br edit
    private boolean validate () {
        
       boolean noKP = userManager.findUser( pengguna.getNoKp(), null) != null ? true : false ;
       boolean idPengguna = userManager.findUserByIdUser( pengguna.getIdPengguna()) != null ? true : false ;
       
//       if ((noKP == false) || (idPengguna == false)) {
//           return true;
//       } else {
//           return false;
//       }
       if ((noKP == false) && (idPengguna == false)) {
           return false;
       } 
       else {
           return true;
       }
       
    }
    
    public Resolution showLupaKataLaluanForm() {
        return new JSP("pguna/lupa_kata_laluan.jsp");
    }
    
    public Resolution updatePassword() {
        
        try { // Call Web Service Operation
            com.oas.thit._this.services.THISServices service = new com.oas.thit._this.services.THISServices();
            com.oas.thit._this.services.THISServicesPortType port = service.getTHISServicesHttpSoap11Endpoint();
            // TODO initialize WS operation arguments here
            com.oas.thit._this.xsd.THISRequest req = new com.oas.thit._this.xsd.THISRequest();
            com.oas.thit._this.xsd.ObjectFactory objFactory = new com.oas.thit._this.xsd.ObjectFactory();
            
            req.setHeader( webUtil.createHeader(PROFILE_ENQ_MSG_ID, HEADER_ID_PROFILE_ENQUIRY) );
            
            THISBaseDataElementBody reqBody = objFactory.createTHISBaseDataElementBody();
            reqBody.setTHAcct(objFactory.createTHISBaseDataElementBodyTHAcct(noAkaun));
            reqBody.setTHICNo(objFactory.createTHISBaseDataElementBodyTHICNo(pengguna.getNoKp()));
            
            JAXBElement<THISBaseDataElementBody> jReqBody =  objFactory.createTHISRequestBody(reqBody);
            req.setBody(jReqBody);
            
            // TODO process result here
            com.oas.thit._this.profile.depositor.xsd.DepositorProfileResponse result = port.depositorProfileQuery(req);
            Header header = result.getHeader().getValue();
            String responseCode = header.getResponseCode().getValue();
            if (responseCode.equals(SUCCESSFUL)) {
                DepositorProfileResponseBody resp = result.getBody().getValue();
                if (resp != null) {
                     
                    if(!resp.getTHPassbookNo().getValue().equals(passbook)){
                        addSimpleError("No. Siri Buku yang dimasukkan tidak sah. Sila cuba lagi."); 
                        return new JSP("pguna/lupa_kata_laluan.jsp");
                    }
                    
                    String mPhone = resp.getTHPhoneMobile().getValue().trim();
                    if (StringUtils.isNotBlank(mPhone)) {
                        String generatedPassword = generatePasswordAuto();
                        pengguna = userManager.findUser(pengguna.getNoKp(), null);
                        if (pengguna != null) {                            
                            StringBuilder sb = new StringBuilder("e-THiJARI: Kemaskini kata laluan. ");
                            sb.append("Kata Laluan adalah ").append(generatedPassword).append(". Tidak melakukan transaksi? Hubungi THCC ");
                            sb.append(tHISutilDAO.findById("101").getDeskripsi().toString());
                            String rcode = sMSgatewayManager.sendSMS(mPhone, sb.toString());
                            if (rcode.equals("200")) {
                                addSimpleMessage("Kata laluan telah dihantar ke telefon bimbit anda.");
                                pengguna.setPassword(encrypt(generatedPassword));
                                InfoAudit ia = pengguna.getInfoAudit();
                                ia.setDiKemaskiniOleh(pengguna);
                                ia.setTarikhKemaskini(new Date());
                                pengguna.setInfoAudit(ia);
                                pengguna.setActive('Y');
                                pengguna.setBilanganCubaan(0);
                                userManager.updatePengguna(pengguna);
                                
                                //reset password history table
                                SejarahKatalaluan sejarahKataLaluan = sejarahKataLaluanManager.findSejarahKataLaluanByNoKp(pengguna.getNoKp());
                                if(sejarahKataLaluan!=null)
                                    sejarahKataLaluanDAO.delete(sejarahKataLaluan);
                                
                                SejarahKatalaluan sj = new SejarahKatalaluan();
                                sj.setKataLaluanLama1(pengguna.getPassword());
                                sj.setInfoAudit(ia);
                                sj.setPengguna(pengguna);                                
                                sejarahKataLaluanDAO.save(sj);
                                return new JSP("deposit/msg.jsp");
                                
                            } else {
                                addSimpleError("[ "+rcode + " ] Terdapat masalah pada sistem. Sila cuba sekali lagi.");
                            }

                        } else {
                            addSimpleError("No Pengenalan tidak wujud.");
                            return new JSP("pguna/lupa_kata_laluan.jsp");
                        }
                    } else {
                        addSimpleError("Sila ke kaunter TH yang berdekatan untuk mengemaskini no. telefon bimbit anda.");
                    }
                    
                }
            } else {
                addSimpleError(responseManager.getResponseMessage(responseCode, PROFILE_ENQ_MSG_ID));
            }
        } catch (Exception ex) {
            LOG.error(ex);
            addSimpleError(ex.getMessage());
            
        }
        return new JSP("pguna/lupa_kata_laluan.jsp");
    }
    
    public Resolution changePassword() {
        pengguna = getContext().getCurrentUser();
        if (pengguna != null) {  

            String oldPass = encrypt(oldPassword);
            String newPass = encrypt(password);
            if (!pengguna.getPassword().equals(oldPass)) {
                addSimpleError("Kata laluan lama tidak sah. Sila isi semula.");
                return new JSP("pguna/tukar_kata_laluan.jsp");
            }  
            
            PasswordValidatorUtil passwordValidator = ableContextListener.newInstance(PasswordValidatorUtil.class);
            if (!passwordValidator.validate(password) ) {
                addSimpleError("Kata Laluan tidak menepati piawaian. Sila isi semula.");
                return new JSP("pguna/tukar_kata_laluan.jsp");
            }

            
            InfoAudit ia = pengguna.getInfoAudit();
            ia.setDiKemaskiniOleh(pengguna);
            ia.setTarikhKemaskini(new Date());
            SejarahKatalaluan sejarahKatalaluan = sejarahKataLaluanManager.findSejarahKataLaluanByNoKp(pengguna.getNoKp());
            if(sejarahKatalaluan !=null){

                if(sejarahKatalaluan.getKataLaluanLama1() !=null && newPass.equals(sejarahKatalaluan.getKataLaluanLama1().trim())){
                    addSimpleError("Sila gunakan kata laluan yang lain");
                    return new JSP("pguna/tukar_kata_laluan.jsp");
                }else if(sejarahKatalaluan.getKataLaluanLama2()!= null && newPass.equals(sejarahKatalaluan.getKataLaluanLama2().trim())){
                    addSimpleError("Sila gunakan kata laluan yang lain");
                    return new JSP("pguna/tukar_kata_laluan.jsp");
                }else if(sejarahKatalaluan.getKataLaluanLama3()!=null && newPass.equals(sejarahKatalaluan.getKataLaluanLama3().trim())){
                    addSimpleError("Sila gunakan kata laluan yang lain");
                    return new JSP("pguna/tukar_kata_laluan.jsp");
                }else{                           
                    sejarahKatalaluan.setInfoAudit(ia);
                    sejarahKatalaluan.setPengguna(pengguna);                            
                    if(sejarahKatalaluan.getKataLaluanLama2()!=null)
                        sejarahKatalaluan.setKataLaluanLama3(sejarahKatalaluan.getKataLaluanLama2());
                    if(sejarahKatalaluan.getKataLaluanLama1()!=null)
                        sejarahKatalaluan.setKataLaluanLama2(sejarahKatalaluan.getKataLaluanLama1());
                    sejarahKatalaluan.setKataLaluanLama1(newPass);
                    sejarahKataLaluanManager.saveSejarahKataLaluan(sejarahKatalaluan);
                }
            }else{
                sejarahKatalaluan = new SejarahKatalaluan();
                sejarahKatalaluan.setPengguna(pengguna);
                sejarahKatalaluan.setInfoAudit(ia);
                sejarahKatalaluan.setKataLaluanLama1(newPass);
                sejarahKataLaluanManager.saveSejarahKataLaluan(sejarahKatalaluan);
            }

            pengguna.setPassword(newPass);
            pengguna.setInfoAudit(ia);
            userManager.updatePengguna(pengguna);
            addSimpleMessage("Kata Laluan berjaya ditukar.");                    
  
        } else {
            addSimpleError("Pengguna tidak wujud.");
            return new JSP("pguna/tukar_kata_laluan.jsp");
        }        
        return new JSP("pguna/msg.jsp");
    }

    /*
     * Added in by : hasnor
     * Date :  1/06/2015
     * Details : Manage Security features. Will display current 
     */
    public Resolution manageSecurityForm() {
         pengguna = getContext().getCurrentUser();
         
         if (pengguna != null) {
            pengguna = userManager.findUser(pengguna.getNoKp(), null);
            pengguna.setImgid(pengguna.getImgid());
            pengguna.setSecPhrase(pengguna.getSecPhrase());
   
            
            return new JSP("pguna/manage_security_info.jsp");
         }
        
        return new JSP("pguna/msg.jsp");
    }
            
    /*
     * Added in by : hasnor
     * Date :  2/06/2015
     * Details : save security picture/phrase
     */
    public Resolution saveSecurityInfo() {
    pengguna = getContext().getCurrentUser();
        if (pengguna == null) {
            return new RedirectResolution(WelcomeActionBean.class)
                    .addParameter("message", "Sila LOG MASUK terlebih dahulu untuk menggunakan perkhidmatan ini.");
        }
        
//        AccCheckUtil checking = ableContextListener.newInstance(AccCheckUtil.class);
//        deposit.setNoKpDari(deposit.getNoKp());
//        deposit.setNoAkaunDari(deposit.getNoAkaun());
//        boolean check = checking.checkAcc(deposit, pengguna);
//        
//        if (!check) {
//            addSimpleError("" + responseManager.getResponseMessage("9000", PROFILE_ENQ_MSG_ID));
//            return new JSP("deposit/msg.jsp");
//        }
        
        InfoAudit ia = new InfoAudit();
        ia.setDimasukOleh(pengguna);
        ia.setTarikhMasuk(new Date());
        
        HttpSession ses = context.getRequest().getSession();
        KodKebenaranTransaksi kodKebenaranTransaksi = sMSgatewayManager.findKodKebenaranTransaksiBySessionId(ses.getId(), HEADER_ID_EDIT_SECURITY, "Y");
        if(kodKebenaranTransaksi != null){            
            if(kodKebenaranTransaksi.getSah().equals("Y") && kodKebenaranTransaksi.getKodKebenaranTransaksi().equals(tacNumber)){
                kodKebenaranTransaksi.setInfoAudit(ia);
                kodKebenaranTransaksi.setSah("N");         
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
                
                try{
                    //checking 
                    if (imgidNew != null && secretPhraseNew != null) {
                        pengguna.setImgid(imgidNew);
                        pengguna.setSecPhrase(secretPhraseNew);
                        pengguna.setInfoAudit(ia);
                        userManager.updatePengguna(pengguna);
                        addSimpleMessage("Kemaskini berjaya.");  
                    } else if (imgidNew != null && secretPhraseNew == null) {
                        pengguna.setImgid(imgidNew);
                        pengguna.setSecPhrase(pengguna.getSecPhrase());
                        pengguna.setInfoAudit(ia);
                        userManager.updatePengguna(pengguna);
                        addSimpleMessage("Kemaskini berjaya.");
                    } else if (imgidNew == null && secretPhraseNew != null) {
                        pengguna.setImgid(pengguna.getImgid());
                        pengguna.setSecPhrase(secretPhraseNew);
                        pengguna.setInfoAudit(ia);
                        userManager.updatePengguna(pengguna);
                        addSimpleMessage("Kemaskini berjaya.");
                    } else if (imgidNew == null && secretPhraseNew == null) {
                        addSimpleMessage("Tiada kemaskini yang di buat.");
                    } else {
                        addSimpleError("Tiada kemaskini yang di buat.");
                    }

                } catch (Exception ex) {
                    LOG.error(ex);
                    addSimpleError(ex.getMessage());

                }
               // sMSgatewayManager.saveTAC(kodKebenaranTransaksi);
                //addSimpleMessage("Kemaskini berjaya.");    
                return new JSP("pguna/manage_security_info.jsp");
                
            }else{ 
                addSimpleError("KOD PENGESAHAN TRANSAKSI(TAC) TIDAK SAH");
                return new JSP("pguna/manage_security_info.jsp");
            }
        }else{
            addSimpleError("KOD PENGESAHAN TRANSAKSI(TAC) TIDAK SAH");
            return new JSP("pguna/manage_security_info.jsp");
        }
          
    }
    
    /*
     * Added in by : hasnor
     * Date :  1/06/2015
     * 
     */
    public Resolution editSecurityInfo() {
    
         pengguna = getContext().getCurrentUser();
        if (pengguna == null) {
            return new RedirectResolution(WelcomeActionBean.class)
                    .addParameter("message", "Sila LOG MASUK terlebih dahulu untuk menggunakan perkhidmatan ini.");
        }
        
        InfoAudit ia = new InfoAudit();
        ia.setDimasukOleh(pengguna);
        ia.setTarikhMasuk(new Date());
        
        HttpSession ses = context.getRequest().getSession();
        KodKebenaranTransaksi kodKebenaranTransaksi = sMSgatewayManager.findKodKebenaranTransaksiBySessionId(ses.getId(), HEADER_ID_EDIT_SECURITY, "Y");
        if(kodKebenaranTransaksi != null){            
            if(kodKebenaranTransaksi.getSah().equals("Y") && kodKebenaranTransaksi.getKodKebenaranTransaksi().equals(tacNumber)){
                kodKebenaranTransaksi.setInfoAudit(ia);
                kodKebenaranTransaksi.setSah("N");         
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
                
                try{
                    //checking 
                    pengguna.setSecPhrase(secretPhraseNew);
                    pengguna.setInfoAudit(ia);
                    userManager.updatePengguna(pengguna);
                    addSimpleMessage("Kemaskini berjaya."); 
                    return new JSP("pguna/msg.jsp");  
           
                } catch (Exception ex) {
                    LOG.error(ex);
                    addSimpleError(ex.getMessage());
                }  
                return new JSP("pguna/update_security_info.jsp");
                //return new JSP("home.jsp");
                
            }else{ 
                addSimpleError("KOD PENGESAHAN TRANSAKSI(TAC) TIDAK SAH");
                return new JSP("pguna/update_security_info.jsp");
            }
        }else{
            addSimpleError("KOD PENGESAHAN TRANSAKSI(TAC) TIDAK SAH");
            return new JSP("pguna/update_security_info.jsp");
        }
        
    }
    
    
    public Pengguna getPengguna() {
        return pengguna;
    }

    public void setPengguna(Pengguna pengguna) {
        this.pengguna = pengguna;
    }   

    public String getNoPin() {
        return noPin;
    }

    public void setNoPin(String noPin) {
        this.noPin = noPin;
    }

    public String getNoAkaun() {
        return noAkaun;
    }

    public void setNoAkaun(String noAkaun) {
        this.noAkaun = noAkaun;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassbook() {
        return passbook;
    }

    public void setPassbook(String passbook) {
        this.passbook = passbook;
    }

    public String getOldPassword() {
        return oldPassword;
    }

    public void setOldPassword(String oldPassword) {
        this.oldPassword = oldPassword;
    }

    public String getTacNumber() {
        return tacNumber;
    }

    public void setTacNumber(String tacNumber) {
        this.tacNumber = tacNumber;
    }

  

    public void setsMSgatewayManager(SMSgatewayManager sMSgatewayManager) {
        this.sMSgatewayManager = sMSgatewayManager;
    }

    public String getImgidNew() {
        return imgidNew;
    }

    public String getSecretPhraseNew() {
        return secretPhraseNew;
    }

    public void setImgidNew(String imgidNew) {
        this.imgidNew = imgidNew;
    }

    public void setSecretPhraseNew(String secretPhraseNew) {
        this.secretPhraseNew = secretPhraseNew;
    }
    
      
}
